// 导入uni-id-common模块和数据库
// 使用相对路径引用uni_modules中的模块
const uniID = require('../../../../uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common/index.js');
const db = uniCloud.database();
const _ = db.command;
// 导入配置中心
const createConfigCenter = require('../../../uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js');

/**
 * 记录动态分享行为
 * @param {Object} event 客户端传入的参数
 * @param {String} event.token 用户token
 * @param {String} event.postId 动态ID
 * @param {String} event.platform 分享平台
 * @param {Object} context 上下文信息
 */
exports.main = async (event, context) => {
  const { token, postId, platform = 'unknown' } = event;
  
  // 初始化配置中心并获取uni-id配置
  const config = createConfigCenter({ pluginId: 'uni-id' });
  const uniIdConfig = config.config();
  
  // 初始化uniID实例
  const uniIDIns = uniID.createInstance({
    context,
    config: uniIdConfig
  });
  
  // 校验参数
  if (!postId) {
    return {
      code: 1,
      message: '动态ID不能为空'
    };
  }
  
  // 检查并验证token
  let userId = null;
  if (token) {
    try {
      const checkTokenRes = await uniIDIns.checkToken(token);
      if (!checkTokenRes.code) {
        userId = checkTokenRes.uid;
      }
    } catch (error) {
      console.error('token验证失败:', error);
    }
  }
  
  try {
    // 检查动态是否存在
    const dynamicCollection = db.collection('dynamic_posts');
    const postRes = await dynamicCollection.doc(postId).get();
    
    if (!postRes.data) {
      return {
        code: 1,
        message: '动态不存在'
      }
    }
    
    const post = postRes.data;
    
    // 检查权限
    if (post.privacy === 'private' && userId && post.userId !== userId) {
      // 检查是否是关注者
      const followRes = await db.collection('user_follows')
        .where({
          userId: userId,
          followId: post.userId
        })
        .count();
      
      if (followRes.total === 0) {
        return {
          code: 1,
          message: '无权限分享此动态'
        };
      }
    } else if (post.privacy === 'followers' && userId && post.userId !== userId) {
      // 检查是否是关注者
      const followRes = await db.collection('user_follows')
        .where({
          userId: userId,
          followId: post.userId
        })
        .count();
      
      if (followRes.total === 0) {
        return {
          code: 1,
          message: '无权限分享此动态'
        };
      }
    }
    
    // 开始事务
    const transaction = await db.startTransaction();
    
    try {
      // 更新动态的分享数
      await transaction.collection('dynamic_posts')
        .doc(postId)
        .update({
          shareCount: _.inc(1)
        });
      
      // 记录分享行为（可选，如果需要统计分享数据）
      if (userId) {
        // 检查用户是否已经分享过此动态（可选，如果需要限制重复分享）
        const shareLogCollection = transaction.collection('share_logs');
        const existingShareRes = await shareLogCollection
          .where({
            userId: userId,
            postId: postId
          })
          .count();
        
        // 如果不限制重复分享，或者用户未分享过，则记录分享日志
        if (existingShareRes.total === 0) {
          await shareLogCollection.add({
            userId: userId,
            postId: postId,
            platform: platform,
            shareTime: new Date().getTime()
          });
        }
      }
      
      // 提交事务
      await transaction.commit();
      
      // 查询更新后的分享数
      const updatedPostRes = await dynamicCollection.doc(postId).field({ shareCount: true }).get();
      
      return {
        code: 0,
        message: '分享记录成功',
        data: {
          shareCount: updatedPostRes.data.shareCount
        }
      };
    } catch (error) {
      // 回滚事务
      await transaction.rollback();
      throw error;
    }
  } catch (error) {
    console.error('记录分享行为失败:', error);
    return {
      code: 1,
      message: '分享记录失败',
      data: error.message
    };
  }
};